#!/usr/bin/python3.8.9
# -*- coding: utf-8 -*-

# @Author  : Tina Yu
# @Time    : 2021-12-30 19:20

# 关于app的基础操作

from appium import webdriver

from homework.task_app.base.base_page import BasePage
from homework.task_app.page.main_page import MainPage
from utils.my_logger import log


class App(BasePage):

    def start(self):
        # 当有多台机器时，需要配置appium client与server之间的端口、设备uuid
        # 执行时需要传入对应的参数，执行语句：
        # mac系统：udid="127.0.0.1:7555" port=4723 pytest test_add_member.py
        # windows：set udid="127.0.0.1:7555",回车后再输入 set port="4723"，回车后再输入 pytest test_add_member.py
        # 另外启动一个appium server且指定端口：appium –session-override –p 4725
        # udid = os.getenv("uuid")
        # port = os.getenv("port")
        udid = '127.0.0.1:7555'
        port = 4723
        log.info(f"当前设备的udid为：{udid}，appium client与server间port为：{port}")
        """启动app"""
        # 为了应对appium server挂掉的场景，这里做判断，如果driver为空了，就启动一下。如果不为空，则不重复启动
        # 实现的效果就是app在测试过程中仅启动一次
        # driver是从base_page继承来的，所以class要继承BasePage
        if self.driver is None:
            desire_cap = {
                "platformName": "Android",
                "deviceName": "127.0.0.1:755",
                "uuid": udid,
                # 获取命令：adb shell "logcat ActivityManager:I |grep cmp"
                "appPackage": "com.tencent.wework",
                "appActivity": ".launch.LaunchSplashActivity",
                "noReset": True,
                # 跳过设备初始化，跳过settings.apk的安装与配置
                # "skipDeviceInitialization": True,
                # 跳过uiautomator2 服务安装
                # "skipServerInstallation": True,
                # "appium:dontStopAppOnReset": True,
                # 由于页面是动态的，所以会很慢。从log中可分析出原因是idle时间是10s，这里可自行设置，缩短时间
                "settings[waitForIdleTimeout]": 500,
            }
            self.driver = webdriver.Remote(f"http://localhost:{port}/wd/hub", desire_cap)
            self.driver.implicitly_wait(20)
            log.info(f"完成driver初始化：{self.driver} ")
        else:
            # 如果driver不为None则直接启动app。默认启动driver中保存的desire信息，就不需要重新设置desire信息了
            log.info(f"复用driver：{self.driver}")
            self.driver.launch_app()
        return self  # 由于启动后要跳转到首页，所以这里返回self，便于调用into_main_page方法

    def stop(self):
        """停止app"""
        self.driver.quit()

    def restart(self):
        """重启app"""
        # 仅关闭app，不退出driver
        self.driver.close_app()
        self.driver.launch_app()

    def into_main_page(self):
        """进入首页"""
        # 自动进入首页，不需要写code处理
        return MainPage(self.driver)
